<!DOCTYPE html><html lang="en" class="astro-TFKA5VKL"><head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width">
  <title>Welcome to Astro.</title>
<link rel="stylesheet" href="/assets/index-links-post.be069062.css" th:href="@{/assets/index-links-post.be069062.css}">
<link rel="stylesheet" href="/assets/index.396b2b11.css" th:href="@{/assets/index.396b2b11.css}"></head>

<body class="astro-TFKA5VKL">
  <div class="flex justify-between astro-TFKA5VKL">
    <nav class="flex gap-3 astro-TFKA5VKL">
      <a href="/" th:href="@{/}" class="astro-TFKA5VKL">Home</a>
      <a href="/post" th:href="@{/post}" class="astro-TFKA5VKL">Post</a>
      <a href="/links" th:href="@{/links}" class="astro-TFKA5VKL">Links</a>
    </nav>
    <div class="astro-TFKA5VKL">
      <a href="/" class="astro-TFKA5VKL">默认</a>
      <a href="/?language=zh" class="astro-TFKA5VKL">中文</a>
      <a href="/?language=en" class="astro-TFKA5VKL">英文</a>
    </div>
  </div>
  <main class="astro-AQ2P6PWU">
    <h1 class="astro-AQ2P6PWU">Welcome to <span class="text-gradient astro-AQ2P6PWU">Astro</span></h1>
    <p class="instructions astro-AQ2P6PWU">
      Check out the <code class="astro-AQ2P6PWU">src/pages</code> directory to get started.<br class="astro-AQ2P6PWU">
      <strong class="astro-AQ2P6PWU">Code Challenge:</strong> Tweak the "Welcome to Astro" message above.
    </p>
    <ul role="list" class="link-card-grid astro-AQ2P6PWU">
      <li class="link-card astro-DYDDWWYO">
	<a href="https://docs.astro.build/" class="astro-DYDDWWYO">
		<h2 class="astro-DYDDWWYO">
			Documentation
			<span class="astro-DYDDWWYO">→</span>
		</h2>
		<p class="astro-DYDDWWYO">
			Learn how Astro works and explore the official API docs.
		</p>
	</a>
</li>
      <li class="link-card astro-DYDDWWYO">
	<a href="https://astro.build/integrations/" class="astro-DYDDWWYO">
		<h2 class="astro-DYDDWWYO">
			Integrations
			<span class="astro-DYDDWWYO">→</span>
		</h2>
		<p class="astro-DYDDWWYO">
			Supercharge your project with new frameworks and libraries.
		</p>
	</a>
</li>
      <li class="link-card astro-DYDDWWYO">
	<a href="https://astro.build/themes/" class="astro-DYDDWWYO">
		<h2 class="astro-DYDDWWYO">
			Themes
			<span class="astro-DYDDWWYO">→</span>
		</h2>
		<p class="astro-DYDDWWYO">
			Explore a galaxy of community-built starter themes.
		</p>
	</a>
</li>
      <li class="link-card astro-DYDDWWYO">
	<a href="https://astro.build/chat/" class="astro-DYDDWWYO">
		<h2 class="astro-DYDDWWYO">
			Chat
			<span class="astro-DYDDWWYO">→</span>
		</h2>
		<p class="astro-DYDDWWYO">
			Come say hi to our amazing Discord community. ❤️
		</p>
	</a>
</li>
    </ul>
    <ul class="list-decimal list-inside astro-AQ2P6PWU">
      <li th:text="#{foo}" class="astro-AQ2P6PWU"></li>
      <li th:text="#{bar}" class="astro-AQ2P6PWU"></li>
      <li th:text="#{hello('Ryan Wang')}" class="astro-AQ2P6PWU"></li>
    </ul>
    <style>astro-island,astro-slot{display:contents}</style><script>(self.Astro=self.Astro||{}).visible=(s,c,n)=>{const r=async()=>{await(await s())()};let i=new IntersectionObserver(e=>{for(const t of e)if(!!t.isIntersecting){i.disconnect(),r();break}});for(let e=0;e<n.children.length;e++){const t=n.children[e];i.observe(t)}},window.dispatchEvent(new Event("astro:visible"));var d;{const l={0:t=>t,1:t=>JSON.parse(t,n),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(JSON.parse(t,n)),5:t=>new Set(JSON.parse(t,n)),6:t=>BigInt(t),7:t=>new URL(t)},n=(t,r)=>{if(t===""||!Array.isArray(r))return r;const[e,i]=r;return e in l?l[e](i):void 0};customElements.get("astro-island")||customElements.define("astro-island",(d=class extends HTMLElement{constructor(){super(...arguments);this.hydrate=()=>{if(!this.hydrator||this.parentElement?.closest("astro-island[ssr]"))return;const r=this.querySelectorAll("astro-slot"),e={},i=this.querySelectorAll("template[data-astro-template]");for(const s of i)!s.closest(this.tagName)?.isSameNode(this)||(e[s.getAttribute("data-astro-template")||"default"]=s.innerHTML,s.remove());for(const s of r)!s.closest(this.tagName)?.isSameNode(this)||(e[s.getAttribute("name")||"default"]=s.innerHTML);const o=this.hasAttribute("props")?JSON.parse(this.getAttribute("props"),n):{};this.hydrator(this)(this.Component,o,e,{client:this.getAttribute("client")}),this.removeAttribute("ssr"),window.removeEventListener("astro:hydrate",this.hydrate),window.dispatchEvent(new CustomEvent("astro:hydrate"))}}connectedCallback(){!this.hasAttribute("await-children")||this.firstChild?this.childrenConnectedCallback():new MutationObserver((r,e)=>{e.disconnect(),this.childrenConnectedCallback()}).observe(this,{childList:!0})}async childrenConnectedCallback(){window.addEventListener("astro:hydrate",this.hydrate),await import(this.getAttribute("before-hydration-url")),this.start()}start(){const r=JSON.parse(this.getAttribute("opts")),e=this.getAttribute("client");if(Astro[e]===void 0){window.addEventListener(`astro:${e}`,()=>this.start(),{once:!0});return}Astro[e](async()=>{const i=this.getAttribute("renderer-url"),[o,{default:s}]=await Promise.all([import(this.getAttribute("component-url")),i?import(i):()=>()=>{}]),a=this.getAttribute("component-export")||"default";if(!a.includes("."))this.Component=o[a];else{this.Component=o;for(const c of a.split("."))this.Component=this.Component[c]}return this.hydrator=s,this.hydrate},r,this)}attributeChangedCallback(){this.hydrator&&this.hydrate()}},d.observedAttributes=["props"],d))}</script><astro-island uid="2pcixh" component-url="/assets/PostCard.ccb901a8.js" component-export="default" renderer-url="/assets/client.396edee1.js" props="{&quot;class&quot;:[0,&quot;astro-AQ2P6PWU&quot;]}" ssr="" client="visible" before-hydration-url="data:text/javascript;charset=utf-8,//[no before-hydration script]" opts="{&quot;name&quot;:&quot;PostCard&quot;,&quot;value&quot;:true}" await-children="" th:component-url="@{/assets/PostCard.ccb901a8.js}" th:renderer-url="@{/assets/client.396edee1.js}"><div class="p-4 astro-AQ2P6PWU"><span class="text-xl font-bold" th:text="@{post.title}">Hello Halo</span><div class="flex flex-col items-center py-16"><div class="h-32 w-32"><div class="h-full w-full rounded-md bg-white shadow-lg"></div></div><button class="mt-8 flex transform items-center rounded-full bg-black bg-opacity-20 px-3 py-2 text-sm font-medium text-white transition hover:scale-105 hover:bg-opacity-30 focus:outline-none active:bg-opacity-40"><svg class="h-5 w-5 opacity-70" fill="none" viewBox="0 0 20 20"><path d="M14.9497 14.9498C12.2161 17.6835 7.78392 17.6835 5.05025 14.9498C2.31658 12.2162 2.31658 7.784 5.05025 5.05033C7.78392 2.31666 12.2161 2.31666 14.9497 5.05033C15.5333 5.63385 15.9922 6.29475 16.3266 7M16.9497 2L17 7H16.3266M12 7L16.3266 7" stroke="currentColor" stroke-width="1.5"></path></svg><span class="ml-3">Click to transition</span></button></div></div></astro-island>
    <p th:each="post : ${postFinder.list(1, 10)}" class="astro-AQ2P6PWU">
  <span th:text="${post.name}" class="astro-AQ2P6PWU">Onions</span>
</p>
  </main>



</body></html>